package com.healthy_software.dto;

import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;

@Data
public class HealthPlanDTO {
    // 分解方案基本信息
    private String 分解方案ID;
    private String 用户ID;
    private String 目标名称;
    private String 目标描述;
    private String 生成时间;

    // 运动目标列表
    private List<ExerciseGoal> 运动目标;

    // 饮食目标列表
    private List<DietGoal> 饮食目标;

    // 心理目标列表
    private List<MentalGoal> 心理目标;

    // 运动目标内部类
    @Data
    public static class ExerciseGoal {
        private String 目标ID;
        private String 目标标题;
        private String 目标类型 = "exercise";
        private String 具体内容;
        private String 推荐强度;
        private String 推荐频率;
        private Integer 推荐时长_分钟;
        private Boolean 可打卡 = true;
        private String 计量单位;
        private Integer 默认值;
        private String 预期效果;
        private String 注意事项;
    }

    // 饮食目标内部类
    @Data
    public static class DietGoal {
        private String 目标ID;
        private String 目标标题;
        private String 目标类型 = "diet";
        private String 具体内容;
        private String 推荐餐次;
        private String 推荐频率;
        private Boolean 可打卡 = true;
        private String 预期效果;
        private String 注意事项;
        private String 计量单位;
        private Integer 默认值;
        private List<MealSuggestion> 具体餐次建议;
    }

    // 餐次建议内部类
    @Data
    public static class MealSuggestion {
        private String 餐次; // 对应diet_records.meal_type
        private String 食物来源_场景;
        private List<FoodItem> 建议食物;
        private List<Nutrient> 建议营养元素份量;
    }

    @Data
    public static class Nutrient {
        private Integer 卡路里;
        private Integer 蛋白质;
        private Integer 脂肪;
        private Integer 碳水化合物;
    }

    // 食物项内部类
    @Data
    public static class FoodItem {
        private String 名称;
        private String 份量;
        private Integer 卡路里_估算;
        private Boolean 应季;
    }

    // 心理目标内部类
    @Data
    public static class MentalGoal {
        private String 目标ID;
        private String 目标标题;
        private String 目标类型 = "mental";
        private String 具体内容;
        private String 推荐频率;
        private Integer 推荐时长_分钟;
        private Boolean 可打卡 = true;
        private String 计量单位;
        private Integer 默认值;
        private String 预期效果;
        private String 注意事项;
    }

    // 初始化方法：生成默认ID和时间
    public void initBaseInfo(String userId) {
        this.分解方案ID = UUID.randomUUID().toString().replace("-", "");
        this.用户ID = userId;
        this.生成时间 = LocalDateTime.now().toString().replace("T", " ");
    }
}